package com.probox.activity.api.domain;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.probox.common.core.annotation.Excel;
import com.probox.common.core.enums.ActivityStatusEnum;
import com.probox.common.core.enums.CouponTypeEnum;
import com.probox.common.core.enums.ExpireTypeEnum;
import com.probox.common.core.utils.DateUtils;
import com.probox.common.core.utils.StringUtils;
import com.probox.common.core.utils.money.PriceFormatUtil;
import com.probox.product.api.domain.ProductInfoVo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

@Data
public class ActivityCouponVo implements Serializable {

    private static final long serialVersionUID = 1L;

    //默认主键自增
    private Long couponUid;

    /** 平台id */
    @Excel(name = "平台id")
    @ApiModelProperty(value = "平台id(平台id)")
    private Long platformUid;

    /** 优惠券名称 */
    @Excel(name = "优惠券名称")
    @ApiModelProperty(value = "优惠券名称(优惠券名称)")
    private String couponName;

    /** 类型 满减券1/折扣券2 */
    @Excel(name = "类型 满减券1/折扣券2")
    @ApiModelProperty(value = "类型 满减券1/折扣券2(类型 满减券1/折扣券2)")
    private String couponType;

    /** 图标url */
    @Excel(name = "图标url")
    @ApiModelProperty(value = "图标url(图标url)")
    private String couponIconUrl;

    /** 满减券时：优惠券金额/折扣券时：折扣率,10代表1折，78代表78折 */
    @Excel(name = "满减券时：优惠券金额/折扣券时：折扣率,10代表1折，78代表78折")
    @ApiModelProperty(value = "满减券时：优惠券金额/折扣券时：折扣率,10代表1折，78代表78折(满减券时：优惠券金额/折扣券时：折扣率,10代表1折，78代表78折)")
    private Long couponAmount;

    /** 基数金额(使用门槛) */
    @Excel(name = "基数金额(使用门槛)")
    @ApiModelProperty(value = "基数金额(使用门槛)(基数金额(使用门槛))")
    private Long baseAmount;

    /** 用户可以领取开始时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "用户可以领取开始时间" , width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "用户可以领取开始时间(用户可以领取开始时间)")
    private Date getStartDate;

    /** 到期类型 1领取后生效/2固定时间 */
    @Excel(name = "到期类型 1领取后生效/2固定时间")
    @ApiModelProperty(value = "到期类型 1领取后生效/2固定时间(到期类型 1领取后生效/2固定时间)")
    private String expireType;

    /** 有效开始时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "有效开始时间" , width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "有效开始时间(有效开始时间)")
    private Date startDate;

    /** 结束时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "结束时间" , width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "结束时间(结束时间)")
    private Date endDate;

    /** 有效时长（天），比如90天，那么用户获取到次券可以从今天开始到90天内都可以使用该券 */
    @Excel(name = "有效时长" , readConverterExp = "天=")
    @ApiModelProperty(value = "有效时长(天=)")
    private Integer expireDays;

    /** 适用商品ID集合,逗号分隔 */
    @Excel(name = "适用商品ID集合,逗号分隔")
    @ApiModelProperty(value = "适用商品ID集合,逗号分隔(适用商品ID集合,逗号分隔)")
    private String couponProUids;

    /** 状态（1发布有效0下架-1删除 */
    @Excel(name = "状态" , readConverterExp = "状态（1发布有效0下架-1删除")
    @ApiModelProperty(value = "状态(状态（1发布有效0下架-1删除)")
    private String couponStatus;

    /** 优惠券总数量（-1无限制 */
    @Excel(name = "优惠券总数量" , readConverterExp = "优惠券总数量（-1无限制")
    @ApiModelProperty(value = "优惠券总数量(优惠券总数量（-1无限制)")
    private Integer couponNums;

    /** 已领用数量 */
    @Excel(name = "已领用数量")
    @ApiModelProperty(value = "已领用数量(已领用数量)")
    private Integer useNums;

    /** 描述 */
    @Excel(name = "描述")
    @ApiModelProperty(value = "描述(描述)")
    private String couponDesc;

    /** 排序 */
    @Excel(name = "排序")
    @ApiModelProperty(value = "排序(排序)")
    private Integer dataPriority;

    /** $column.columnComment */
    private Long updateUid;

    /** $column.columnComment */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "修改时间" , width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "修改时间")
    private Date updateTime;

    /** $column.columnComment */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "创建时间" , width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "创建时间")
    private Date createTime;

    /** $column.columnComment */
    private Long createUid;

    /** 创建人名称 */
    @Excel(name = "创建人名称")
    @ApiModelProperty(value = "创建人名称(创建人名称)")
    private String createName;

    /** 更新人名称 */
    @Excel(name = "更新人名称")
    @ApiModelProperty(value = "更新人名称(更新人名称)")
    private String updateName;

    //适用商品列表
    @ApiModelProperty(value = "适用商品列表")
    private List<ProductInfoVo> proList;

    //是否可以领取 1可以领取  0不能领取
    @ApiModelProperty(value = "是否可以领取 1可以领取  0不能领取")
    private String canGet;

    /**
     * 用户ID集合
     */
    private String customerIds;

    public String getBaseAmountStr(){
        return PriceFormatUtil.format(baseAmount);
    }

    public String getCouponTypeName() {
        return CouponTypeEnum.getNameByKey(couponType);
    }

    public String getCouponAmountStr() {
        if (CouponTypeEnum.discount.getKey().equals(couponType)) {
            return PriceFormatUtil.formatDiscount(couponAmount);
        }else{
            return PriceFormatUtil.format(couponAmount);
        }
    }

    public String getCouponAmountName(){
        if (CouponTypeEnum.discount.getKey().equals(couponType)) {
            return PriceFormatUtil.formatDiscount(couponAmount)+"折";
        }else{
            return "满"+PriceFormatUtil.format(baseAmount)+"元减"+PriceFormatUtil.format(couponAmount)+"元";
        }
    }

    public String getExpireTypeName(){
        return ExpireTypeEnum.getNameByKey(expireType);
    }

    public String getStartDateStr() {
        return DateUtils.formateToday(startDate);
    }

    public String getEndDateStr() {
        return DateUtils.formateToday(endDate);
    }

    public String getCouponStartDateStr(){
        return DateUtils.formateToday(startDate);
    }

    public String getCouponEndDateStr() {
        return DateUtils.formateToday(endDate);
    }


    public String getCouponStatusName(){
        return ActivityStatusEnum.getNameByKey(couponStatus);
    }

    /**
     * 适用商品选中状态
     * @return
     */
    public String getCheckProduct(){
        if(StringUtils.isEmpty(couponProUids)){
            return "0";
        }
        return "1";
    }

    /**
     * 使用门槛状态
     */
    public String getCheckBaseAmount(){
        if(baseAmount!=null && baseAmount>0){
            return "1";
        }
        return "0";
    }

    /**
     * 用劵时间状态
     */
    public String getCheckTime(){
        if(expireDays!=null && expireDays>0){
            return "1";
        }
        return "0";
    }


    private HashMap selectData;


    private String couponProType;




}
